Oracle PL/SQL বা SQL তে Execution Plan হল একটি পরিকল্পনা বা রাস্তা যা সার্ভার অনুসরণ করে একটি কুয়েরি চালানোর জন্য। এটি কুয়েরির পারফরম্যান্স উন্নত করার জন্য খুবই গুরুত্বপূর্ণ কারণ এটি দেখায় যে কিভাবে SQL স্টেটমেন্ট বা PL/SQL ব্লকটি বাস্তবায়িত হবে (যেমন: কোন ইনডেক্স ব্যবহার করা হবে, কোন টেবিল স্ক্যান হবে ইত্যাদি)।
একটি SQL কুয়েরি বা PL/SQL ব্লক চালানোর আগে বা পরে এক্সিকিউশন প্ল্যান চেক করা, পারফরম্যান্স অপটিমাইজেশন এবং ত্রুটি সমাধানে সাহায্য করতে পারে।
Execution Plan চেক করার পদ্ধতি
1. EXPLAIN PLAN কমান্ড ব্যবহার করা
Oracle এ কুয়েরি বা PL/SQL ব্লকের এক্সিকিউশন প্ল্যান দেখতে EXPLAIN PLAN কমান্ড ব্যবহার করা হয়। এটি কুয়েরির আসল এক্সিকিউশন প্ল্যান শো করে এবং কীভাবে SQL কুয়েরি এক্সিকিউট হবে তা বিশ্লেষণ করতে সাহায্য করে।
EXPLAIN PLAN Syntax:
EXPLAIN PLAN FOR <SQL QUERY>;
এটি কুয়েরি চালানোর পূর্বে এক্সিকিউশন প্ল্যান তৈরি করবে। পরে DBMS_XPLAN.DISPLAY ফাংশন ব্যবহার করে এক্সিকিউশন প্ল্যান দেখতে পারবেন।
উদাহরণ:
EXPLAIN PLAN FOR
SELECT emp_id, name
FROM employees
WHERE department_id = 10;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
এই উদাহরণে:
- EXPLAIN PLAN FOR কমান্ড কুয়েরি চালানোর জন্য এক্সিকিউশন প্ল্যান তৈরি করবে।
- DBMS_XPLAN.DISPLAY ফাংশনটি সেই এক্সিকিউশন প্ল্যান শো করবে।
আউটপুট:
Plan hash value: 1234567890
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 1000 (100)| 00:00:01 |
| 1 | TABLE ACCESS FULL | EMPLOYEES | 100 | 2500 | 1000 (100)| 00:00:01 |
--------------------------------------------------------------------------------------
এখানে:
- Id: অপারেশনের আইডি (এটি কোন অপারেশন আগে সম্পন্ন হবে তা দেখায়)।
- Operation: SQL অপারেশন যা করা হচ্ছে (যেমন, SELECT STATEMENT, TABLE ACCESS FULL ইত্যাদি)।
- Name: টেবিল বা ভিউয়ের নাম যা এই অপারেশনটির জন্য ব্যবহৃত হচ্ছে।
- Cost: কুয়েরি চালানোর খরচ (যত বেশি কোস্ট, তত বেশি সময় এবং রিসোর্স প্রয়োজন)।
2. AUTOTRACE ব্যবহার করা
AUTOTRACE একটি খুবই সহজ উপায়, যা কুয়েরি চালানোর সময় এক্সিকিউশন প্ল্যান ও কুয়েরির পারফরম্যান্স মেট্রিক্স দেখায়। এটি সাধারণত SQL*Plus বা SQLcl টুলে ব্যবহৃত হয়।
AUTOTRACE ব্যবহার:
SET AUTOTRACE ON EXPLAIN
SELECT emp_id, name
FROM employees
WHERE department_id = 10;
এই কমান্ডের মাধ্যমে:
- কুয়েরি চলাকালীন এক্সিকিউশন প্ল্যান এবং কুয়েরি চালানোর জন্য ব্যবহৃত রিসোর্সগুলি দেখাবে।
আউটপুট:
Execution Plan
----------------------------------------------------------
Plan hash value: 1234567890
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 1000 (100)| 00:00:01 |
| 1 | TABLE ACCESS FULL | EMPLOYEES | 100 | 2500 | 1000 (100)| 00:00:01 |
--------------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
4 consistent gets
0 physical reads
0 redo size
208 bytes sent via SQL*Net to client
170 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 rows processed
এখানে আপনি এক্সিকিউশন প্ল্যান এবং কুয়েরি সম্পর্কিত পারফরম্যান্স তথ্য দেখতে পাবেন, যেমন consistent gets, db block gets, এবং physical reads।
3. Oracle SQL Developer ব্যবহার করা
Oracle SQL Developer ব্যবহার করে এক্সিকিউশন প্ল্যান চেক করা খুবই সহজ। এটি GUI ভিত্তিক টুল এবং নিম্নলিখিত পদক্ষেপ অনুসরণ করে এক্সিকিউশন প্ল্যান দেখা যেতে পারে:
- SQL কুয়েরি লিখুন।
- কুয়েরি রান করুন।
- কুয়েরি রান করার পর, নিচে Execution Plan ট্যাব দেখতে পাবেন।
- সেখানে ক্লিক করলে, এক্সিকিউশন প্ল্যান দেখতে পারবেন।
4. Performance Tuning এবং Optimization এর জন্য এক্সিকিউশন প্ল্যান ব্যবহার করা
এক্সিকিউশন প্ল্যানের মাধ্যমে আপনি কুয়েরি অপটিমাইজেশন করতে পারেন। নিম্নলিখিত কিছু গুরুত্বপূর্ণ বিষয় এক্সিকিউশন প্ল্যান থেকে আপনি জানতে পারবেন:
- Table Scan: যদি টেবিল স্ক্যান হচ্ছে, তবে ইনডেক্স ব্যবহার করা যেতে পারে।
- Join Method: কিভাবে টেবিল গুলো একত্রিত হচ্ছে, যেমন Nested Loop Join, Merge Join ইত্যাদি।
- Index Usage: কুয়েরিতে কোন ইনডেক্স ব্যবহার হচ্ছে কিনা।
- Cost: যদি কুয়েরির কোস্ট বেশি হয়, তবে SQL কুয়েরি অপটিমাইজেশন প্রয়োজন।
কুয়েরি অপটিমাইজেশন উদাহরণ:
যদি আপনি কোন টেবিলের উপর ফুল স্ক্যান দেখেন, তবে সেটির জন্য ইনডেক্স তৈরি করা যেতে পারে:
CREATE INDEX idx_emp_dept_id ON employees(department_id);
এর মাধ্যমে আপনি department_id ফিল্ডে ইনডেক্স তৈরি করতে পারেন, যা টেবিল স্ক্যানের পরিবর্তে ইনডেক্স স্ক্যান ব্যবহার করবে, এবং কুয়েরির পারফরম্যান্স বাড়াবে।
উপসংহার
PL/SQL বা SQL কুয়েরি এক্সিকিউশন প্ল্যান চেক করা খুবই গুরুত্বপূর্ণ, কারণ এটি আপনাকে কুয়েরির কার্যকারিতা বুঝতে এবং তার পারফরম্যান্স অপটিমাইজ করতে সাহায্য করে। EXPLAIN PLAN, AUTOTRACE, এবং SQL Developer এর মতো টুল ব্যবহার করে আপনি সহজেই এক্সিকিউশন প্ল্যান দেখতে পারেন এবং কুয়েরি অপটিমাইজেশন করতে পারেন।
Read more